<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

if (!defined('UCMS_LIB_VERSION')) {
    define('UCMS_LIB_VERSION', 0.6);
}

/**
 * uCMS CodeIgniter Main Library

  Specifikáció
  A library betöltése:
  $this->load->library('ucms_lib');
 * 
 * Admin felület funkció:
 * 
 * 1. feladat: dinamikus menü generálása 
 *  Megkapunk egy könyvtárat, abban betöltjük filenevek alapján
 *  az összes classt, majd elkérjük a ..... ?????
 *                       tagváltozót / visszatérési értéket
 *  ami tartalmazza, hogy mit hol kell megjeleníteni.
 *  Ezeket összemergel-jük egy array-ban, amit a végén eldülnünk a 
 *  menü view-nek majd, és akkor ő már tudja, hogy hogyan épüljön fel
 *  és melyik 
 * 

 * 
 * 2. feladat: egy megkapott view körül az összes 
 *          általános view (melyek mindíg megjelennek) betöltése
 *     A TITLE-t tartalmaznia kell valaminek????
 * 
 * 
 *
 * @author bg
 */
class ucms_lib {

    var $autoload_dir;

    /**
     * Megnyitunk egy könyvtárat, parsoljuk a tartalmát,
     * megnézzük van-e benne php ha van az classnév (-.php)
     * includeoljuk és meghívjuk az _introduction függvényt,
     * ami tartlmazza az infokat a classrol.
     * 
     * 
     * @param type $where 
     */
    public function get_modules_info($dir_of_modules) {
        //most ez még így. ebben a formában nem lesz használva
        /* $CI = & get_instance();
          $CI->load->helper('file');
          $CI->load->helper('directory');

          // elkérjük a kapott directory tartalmát
          $all_modules = directory_map("./" . APPPATH . "$dir_of_modules/", TRUE);


          // ha false az all_files tartalma, akkor nincs ilyen mappa,
          // JELEZZÜK A HIBÁT
          if ($all_modules == FALSE) {
          $this->show_ucms_error("No such directory: " . APPPATH . "$dir_of_modules/");
          }

          // ebben a tömbben tároljuk a modulok nevét
          $module_names = array();



          // megszerezzük a könyvtárneveket, azaz amelyiknek nincs mime-je
          foreach ($all_modules as $module) {
          // nekünk csak a php kiterjesztésű fileok kellenek,
          // azoknak is csak a neve.
          //echo ;
          if (get_mime_by_extension($module) == "") {
          // belerakjuk az array-ba. ucfirst, mert nagybetűket használ
          // az objectek neveként
          array_push($module_names, $module);
          }
          }
          var_dump($module_names);

          /*
          // ha nincs php file a mappában, akkor JELEZZÜK A HIBÁT
          // mert nem tudunk class-okat betölteni

          if (empty($class_names)) {
          $this->show_ucms_error("No php files in directory: " . APPPATH . "$dir_of_classes/ <br />");
          }

          // ebben tároljuk a bemutatkozó szerkezetet
          $introductions = array(
          'ucms_lib_version' => UCMS_LIB_VERSION
          );

          // felépítjük az autoload függvénynek az autoload dir-t
          $this->autoload_dir = FCPATH . APPPATH . "$dir_of_classes/";
          // registraáljuk az autoload callback függvényünket
          //spl_autoload_register(__CLASS__ . "::autoload_class");
          // betöltjük a classokat, és elkérjük a tulajdonságukat

          foreach ($class_names as $class_name) {
          $file = $this->autoload_dir . $class_name . ".php";
          if (file_exists($file)) {
          require_once($file);
          }

          $current_class = new $class_name;
          return;
          if (method_exists($current_class, "_introduction")) {
          array_push($introductions, $foo->_introduction());
          }

          }

          return $introductions; */
    }

    /**
     * Bővített hibaüzenet, debuggal.
     * @param type $message 
     */
    function show_ucms_error($message = NULL) {
        // debugot kérünk magunkra, mert hiba volt.
        $trace = debug_backtrace();
        // kettőt kell shiftelni rajta, hogy a hívó tulajdonságait kapjuk
        array_shift($trace);
        $caller = (object) array_shift($trace);
        // mélyebb debug implementáladnó!!!!
        show_error("Error in " . $caller->class . "->" . $caller->function . "
<br />$message");
    }

    /**
     * 
     * 
     * Egy tömböt kér és object-et ad vissza
     * 
     * 
     * @param type $array
     */
    function array_to_object($array = array()) {
        return (object) $array;
    }

    /**
     * 
     * Egy objectet array-ra konvertál
     * 
     *
     * @param type $object 
     */
    function object_to_array($object = NULL) {
        return get_object_vars($object);
    }

    /**
     *  Generate a slug: url frienly name
     * 
     * @param type $phrase
     * @param type $maxLength
     * @return type 
     */
    function _generate_slug($str, $delimiter='-') {
        setlocale(LC_ALL, 'hu_HU.UTF8');
        $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
        $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
        $clean = strtolower(trim($clean, '-'));
        $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);

        return $clean;
    }

    /**
     *  Generate a slug: url frienly filename
     * 
     * @param type $phrase
     * @param type $maxLength
     * @return type 
     */
    function _clean_filename($str, $delimiter='-') {
        setlocale(LC_ALL, 'hu_HU.UTF8');
        $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
        $clean = preg_replace("/[^a-zA-Z0-9\/_|+ .-]/", '', $clean);
        $clean = strtolower(trim($clean, '-'));
        $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);

        return $clean;
    }

}
